iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
Python

讓Python不拍勝-實用套件實作與介紹系列 第 29

[DAY29]Python自動化測試-Pytest(四)

  • 分享至 

  • xImage
  •  

在上一篇我們介紹了一些 Pytest 套件內實用的裝飾器,今天我們就繼續介紹其他有趣的裝飾器吧

更多的常用裝飾器

@pytest.mark.xfail

這個裝飾器是用來標記一個預期會失敗的測試,就算測試失敗也會被視為測試成功
下面的範例我將test_add()測試函數上面加上了@pytest.mark.xfail,並且將測試參數都改成錯誤的

  • project_test.py
import project
import pytest

@pytest.mark.xfail(reason="已知問題,待修復")
@pytest.mark.parametrize("a, b, return_", [
    (1, 2, 4),
    (2, 7, 10),
    (2, 8, 11),
])
def test_add(a, b, return_):
    assert project.add(a, b) == return_

測試結果
可以從測試結果看到,雖然偵測到 Fail,但仍然沒有回報錯誤
image

@pytest.mark.timeout

這個裝飾器用來測試是否超過設定的最大運行時間,如果超過時間,則會被視為測試失敗

但在使用這個裝飾器之前,要先安裝 Pytest 延伸的套件,Pytest-timeout,因為這個裝飾器 Pytest 沒有內建在裡面

在終端機中輸入以下指令

pip install pytest-timeout

可利用下列指令確認是否有安裝成功

pip list | grep pytest-timeout

下面的範例我會將被測試檔裡面的add()函數加上兩秒的時間延遲,故意讓測試失敗

  • project.py
import time

def add(a, b):
    time.sleep(2)
    return a+b

然後在test_add()函數上面加上@pytest.mark.timeout(1),超過一秒就會測試失敗

  • project_test.py
import project
import pytest

@pytest.mark.timeout(1)
@pytest.mark.parametrize("a, b, return_", [
    (1, 2, 3),
    (2, 7, 9),
    (2, 8, 10),
])
def test_add(a, b, return_):
    assert project.add(a, b) == return_

測試結果
可以看到測試失敗了,並且回報執行時間大於一秒
image

今天就先介紹到這邊,剩下的 Pytest 裝飾器我會在下一篇介紹完畢!


上一篇
[DAY28]Python自動化測試-Pytest(三)
下一篇
[DAY30]Python自動化測試-Pytest(五)
系列文
讓Python不拍勝-實用套件實作與介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言